package com.its.web;

import com.github.pagehelper.PageInfo;
import com.its.pojo.BusClaimReport;
import com.its.service.BusClaimReportService;
import com.its.util.HttpStatusEnum;
import com.its.util.Result;
import com.its.web.param.BusClaimReportControllerListParam;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * <p>
 * 报案表 前端控制器
 * </p>
 *
 * @author 朱厚强
 * @since 2023年12月23日
 */
@RestController
@RequestMapping("/busClaimReport")
@Api(tags = "报案-api")
public class BusClaimReportController {
    @Autowired
    private BusClaimReportService service;

    /**
     * 获取所有的报案信息
     * @return
     */
    @PostMapping("/pageList")
    public Result pagingList(@RequestBody BusClaimReportControllerListParam param){
        PageInfo<BusClaimReport> pageInfo = service.selectList(param);
        if (pageInfo.getSize() > 0){  // isEmpty()方法在列表为空时返回true，否则返回false。 Empty(中译 空的)
            return Result.ok().data(pageInfo).code(HttpStatusEnum.SUCCESS.getCode()).message("返回报案信息");
        }else {
            return Result.error().data(pageInfo).code(HttpStatusEnum.ERROR.getCode()).message("返回报案信息");
        }
    }
    /**
     * 获取所有的报案信息 <br>
     * 带有省市区、报案号查询以及流程状态查询
     * @return
     */
    @PostMapping("/pageListPro")
    public Result pagingListPro(@RequestBody BusClaimReportControllerListParam param){
        PageInfo<BusClaimReport> pageInfo = service.selectListPro(param);
        if (pageInfo.getSize() > 0){  // isEmpty()方法在列表为空时返回true，否则返回false。 Empty(中译 空的)
            return Result.ok().data(pageInfo).code(HttpStatusEnum.SUCCESS.getCode()).message("返回报案信息");
        }else {
            return Result.error().data(pageInfo).code(HttpStatusEnum.ERROR.getCode()).message("返回报案信息");
        }
    }
    /**
     * 添加报案信息
     * @return
     */
    @PostMapping("/add")
    public Result add(@RequestBody BusClaimReport busClaimReport){
        boolean save = service.save(busClaimReport);
        if (save){
            return Result.ok().code(HttpStatusEnum.SUCCESS.getCode()).message("报案信息添加成功");
        }else {
            return Result.error().code(HttpStatusEnum.ERROR.getCode()).message("报案信息添加失败");
        }
    }
    /**
     * 删除报案信息(逻辑删除)
     * @return
     */
    @DeleteMapping("/remove")
    public Result remove(@RequestParam String claimReportId,@RequestParam String cancellationReason){
        boolean b = service.updateById(new BusClaimReport().setClaimReportId(claimReportId).setState(0).setCancellationReason(cancellationReason));
        if (b){
            return Result.ok().code(HttpStatusEnum.SUCCESS.getCode()).message("删除报案信息成功");
        }else {
            return Result.error().code(HttpStatusEnum.ERROR.getCode()).message("删除报案信息失败");
        }
    }
    /**
     * 根据id获取报案信息
     * @return
     */
    @GetMapping("/getById/{id}")
    public Result getById(@PathVariable String id){
        BusClaimReport busClaimReport = service.getById(id);
        if (busClaimReport != null){
            return Result.ok().data(busClaimReport).code(HttpStatusEnum.SUCCESS.getCode()).message("返回报案信息");
        }else {
            return Result.error().data(busClaimReport).code(HttpStatusEnum.ERROR.getCode()).message("所查询报案信息为空");
        }
    }
    /**
     * 更新数据
     */
    @PutMapping("/update")
    public Result update(@RequestBody BusClaimReport busClaimReport){
        boolean removedById = service.updateById(busClaimReport);
        if (removedById){
            return Result.ok().code(HttpStatusEnum.SUCCESS.getCode()).message("修改报案信息成功");
        }else {
            return Result.error().code(HttpStatusEnum.ERROR.getCode()).message("修改报案信息失败");
        }
    }
    /**
     * 返回生成的报案号
     */
    @GetMapping("/claimReportId")
    public Result claimReportId(){
        String companyCode = "XJA"; // 公司标识符
        String currentDate = new SimpleDateFormat("yyyyMMddHHmmssS").format(new Date()); // 当前日期
        String randomPart = String.format("%04d", new Random().nextInt(10000)); // 四位随机数
        return Result.ok().code(HttpStatusEnum.SUCCESS.getCode()).data(companyCode+currentDate+randomPart);
    }
}
